home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 19
/
Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso
/
Aminet
/
gfx
/
board
/
rtgmasdriv.lha
/
driver
/
copy.s
< prev
next >
Wrap
Text File
|
1997-03-29
|
26KB
|
1,199 lines
mc68040
XDEF _AmigaCC040
XDEF _MyCopy8
XDEF _MyCopyBack8
XDEF _MyCopy16
XDEF _MyCopyBack16
XDEF _MyCopy24
XDEF _MyCopyBack24
XDEF _MyCopy32
XDEF _MyCopyBack32
XDEF _RTGM8_BeginDirectRect
XDEF _RTGM8_EndDirectRect
XDEF _RTGM16_BeginDirectRect
XDEF _RTGM16_EndDirectRect
XDEF _RTGM24_BeginDirectRect
XDEF _RTGM24_EndDirectRect
XDEF _RTGM32_BeginDirectRect
XDEF _RTGM32_EndDirectRect
XDEF _TheMap
XDEF _rtgm_backingbuf
XDEF _rtgm_scr
XDEF _RTGMasterBase
XDEF _Sys_SendKeyEvents
XDEF _RTGM8_SwapBuffers
XDEF _RTGM16_SwapBuffers
XDEF _RTGM24_SwapBuffers
XDEF _RTGM32_SwapBuffers
XDEF _currentbuffer
XDEF _proc_type
XDEF _rtgmtype
XDEF _extravram
XDEF _rtgport
IncDir "include:"
Include "include:rtgmaster/rtgmaster_lib.i"
Include "include:exec/types.i"
Include "include:intuition/intuition.i"
Include "include:rtgmaster/rtgmaster.i"
STRUCTURE vid,0
APTR vd_buffer
APTR vd_colormap
ULONG vd_rowbytes
ULONG vd_width
ULONG vd_height
ULONG vd_numpages
APTR vd_direct
LABEL vid_SIZEOF
STRUCTURE vrect,0
ULONG vr_x
ULONG vr_y
ULONG vr_width
ULONG vr_height
APTR vr_pnext
LABEL vrect_SIZEOF
MOVEM EQU 4
RTGMASTER EQU 3
DOUBLEBUFFER EQU 2
BLITTER EQU 1
VID_WAIT_NONE EQU 0
VID_WAIT_VSYNC EQU 1
_AmigaCC040 ;IN: D0 - X
; D1 - Y
; D2 - BYTESPERLINE
; D3 - WIDTH
; D4 - HEIGHT
; A0 - SOURCE BUFFER
; A1 - DESTINATION BUFFER
;NOTES: X MUST BE DIVISIBLE BY 16
; A0 and A1 MUST BE DIVISIBLE BY 16 (MOVE16 restriction)
; This routine is for 8Bit copy and must no be used
; to copy rectangles in 16/24/32 bits
; BYTESPERLINE MUST BE DIVISIBLE BY 16
; MAXIMUN WIDTH = 2048 pixels
MOVEM.L D0-D7/A0-A1,-(A7)
SUBQ.W #1,D4
TST.W D1
BEQ.S .NOD1
MOVE.W D1,D5
MULU.W D2,D5
ADD.L D5,A0
ADD.L D5,A1
.NOD1 CMP.W D2,D3
BEQ .VERYFAST
ADD.W D0,A0
ADD.W D0,A1
SUB.W D3,D2
MOVE.W D3,D0
LSR.W #4,D0
EOR.W #$7F,D0
LSL.W #2,D0
LSR.W #1,D3
AND.W #$7,D3
.BIGLOOP MOVE.W D3,D1
JMP .LOOP(PC,D0.W)
.LOOP MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
DBF D1,.LOOP2
BRA.S .DH
.LOOP2 MOVE.W (A0)+,(A1)+
DBF D1,.LOOP2
.DH ADD.W D2,A0
ADD.W D2,A1
DBF D4,.BIGLOOP
MOVEM.L (A7)+,D0-D7/A0-A1
RTS
.VERYFAST LSR.W #4,D3
EOR.W #$7F,D3
LSL.W #2,D3
.BIGGEST JMP .LOOP3(PC,D3.W)
.LOOP3 MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
MOVE16 (A0)+,(A1)+
DBF D4,.BIGGEST
MOVEM.L (A7)+,D0-D7/A0-A1
RTS
_MyCopy8:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Source X Offset
; D3 - Source Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu d0,d3
add d3,a0
add d2,a0
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.b (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopyBack8:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Destination X Offset
; D3 - Destination Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu d1,d3
add d3,a1
add d2,a1
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.b (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopy16:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Source X Offset
; D3 - Source Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #2,d2
mulu.l d0,d3
add d3,a0
add d2,a0
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.w (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d1,a3
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopyBack16:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Destination X Offset
; D3 - Destination Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #2,d2
mulu.l d1,d3
add.l d3,a1
add.l d2,a1
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.w (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d0,a2
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopy24:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Source X Offset
; D3 - Source Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #3,d2
mulu.l d0,d3
add.l d3,a0
add.l d2,a0
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.w (a0)+,(a1)+
move.b (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d1,a3
add.l d1,a3
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopyBack24:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Destination X Offset
; D3 - Destination Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #3,d2
mulu.l d1,d3
add.l d3,a1
add.l d2,a1
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.w (a0)+,(a1)+
move.b (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d0,a2
add.l d0,a2
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopy32:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Source X Offset
; D3 - Source Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #4,d2
mulu.l d0,d3
add.l d3,a0
add.l d2,a0
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.l (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d1,a3
add.l d1,a3
add.l d1,a3
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_MyCopyBack32:
; A0 - Source Buffer
; A1 - Destination Buffer
; D0 - Source Buffer RowBytes
; D1 - Destination Buffer RowBytes
; D2 - Destination X Offset
; D3 - Destination Y Offset
; D4 - Width
; D5 - Height
movem.l d0-d5/a0-a3,-(sp)
mulu.l #4,d2
mulu.l d1,d3
add.l d3,a1
add.l d2,a1
move.l d4,d2
move.l d5,d3
sub.l #1,d2
sub.l #1,d3
sub.l #1,d4
move.l a0,a2
move.l a1,a3
.loop1:
move.l (a0)+,(a1)+
dbra d2,.loop1
add.l d0,a2
add.l d0,a2
add.l d0,a2
add.l d0,a2
add.l d1,a3
move.l a2,a0
move.l a3,a1
move.l d4,d2
dbra d3,.loop1
movem.l (sp)+,d0-d5/a0-a3
rts
_RTGM8_BeginDirectRect:
movem.l a0-a3/a6/d0-d5,-(sp)
move.l a0,a3
move.l _TheMap,a0
move.l _rtgm_backingbuf,a1
movem.l d0/d1/d2/d3,-(sp)
movem.l d0/d1,-(sp)
move.l vd_rowbytes(a3),d0
move.l d2,d1
move.l d2,d4
move.l d3,d5
movem.l (sp)+,d2/d3
jsr _MyCopy8
move.l _rtgm_scr,a0
move.l _TheMap,a1
movem.l (sp)+,d0/d1/d2/d3
xor.l d4,d4
xor.l d5,d5
move.l _RTGMasterBase,a6
jsr _LVOCopyRtgPixelArray(a6)
movem.l (sp)+,a0-a3/a6/d0-d5
rts
_RTGM8_EndDirectRect:
movem.l a0-a3/d0-d5,-(sp)
move.l a0,a3
move.l _rtgm_backingbuf,a0
move.l _TheMap,a1
move.l d2,d4
move.l d3,d5
move.l d0,d2
move.l d1,d3
move.l d2,d0
move.l vd_rowbytes(a3),d1
jsr _MyCopyBack8
movem.l (sp)+,a0-a3/d0-d5
rts
_RTGM16_BeginDirectRect:
movem.l a0-a3/a6/d0-d5,-(sp)
move.l a0,a3
move.l _TheMap,a0
move.l _rtgm_backingbuf,a1
movem.l d0/d1/d2/d3,-(sp)
movem.l d0/d1,-(sp)
move.l vd_rowbytes(a3),d0
move.l d2,d1
move.l d2,d4
move.l d3,d5
movem.l (sp)+,d2/d3
jsr _MyCopy16
move.l _rtgm_scr,a0
move.l _TheMap,a1
movem.l (sp)+,d0/d1/d2/d3
xor.l d4,d4
xor.l d5,d5
move.l _RTGMasterBase,a6
jsr _LVOCopyRtgPixelArray(a6)
movem.l (sp)+,a0-a3/a6/d0-d5
rts
_RTGM16_EndDirectRect:
movem.l a0-a3/d0-d5,-(sp)
move.l a0,a3
move.l _rtgm_backingbuf,a0
move.l _TheMap,a1
move.l d2,d4
move.l d3,d5
move.l d0,d2
move.l d1,d3
move.l d2,d0
move.l vd_rowbytes(a3),d1
jsr _MyCopyBack16
movem.l (sp)+,a0-a3/d0-d5
rts
_RTGM24_BeginDirectRect:
movem.l a0-a3/a6/d0-d5,-(sp)
move.l a0,a3
move.l _TheMap,a0
move.l _rtgm_backingbuf,a1
movem.l d0/d1/d2/d3,-(sp)
movem.l d0/d1,-(sp)
move.l vd_rowbytes(a3),d0
move.l d2,d1
move.l d2,d4
move.l d3,d5
movem.l (sp)+,d2/d3
jsr _MyCopy24
move.l _rtgm_scr,a0
move.l _TheMap,a1
movem.l (sp)+,d0/d1/d2/d3
xor.l d4,d4
xor.l d5,d5
move.l _RTGMasterBase,a6
jsr _LVOCopyRtgPixelArray(a6)
movem.l (sp)+,a0-a3/a6/d0-d5
rts
_RTGM24_EndDirectRect:
movem.l a0-a3/d0-d5,-(sp)
move.l a0,a3
move.l _rtgm_backingbuf,a0
move.l _TheMap,a1
move.l d2,d4
move.l d3,d5
move.l d0,d2
move.l d1,d3
move.l d2,d0
move.l vd_rowbytes(a3),d1
jsr _MyCopyBack24
movem.l (sp)+,a0-a3/d0-d5
rts
_RTGM32_BeginDirectRect:
movem.l a0-a3/a6/d0-d5,-(sp)
move.l a0,a3
move.l _TheMap,a0
move.l _rtgm_backingbuf,a1
movem.l d0/d1/d2/d3,-(sp)
movem.l d0/d1,-(sp)
move.l vd_rowbytes(a3),d0
move.l d2,d1
move.l d2,d4
move.l d3,d5
movem.l (sp)+,d2/d3
jsr _MyCopy32
move.l _rtgm_scr,a0
move.l _TheMap,a1
movem.l (sp)+,d0/d1/d2/d3
xor.l d4,d4
xor.l d5,d5
move.l _RTGMasterBase,a6
jsr _LVOCopyRtgPixelArray(a6)
movem.l (sp)+,a0-a3/a6/d0-d5
rts
_RTGM32_EndDirectRect:
movem.l a0-a3/d0-d5,-(sp)
move.l a0,a3
move.l _rtgm_backingbuf,a0
move.l _TheMap,a1
move.l d2,d4
move.l d3,d5
move.l d0,d2
move.l d1,d3
move.l d2,d0
move.l vd_rowbytes(a3),d1
jsr _MyCopyBack32
movem.l (sp)+,a0-a3/d0-d5
rts
_Sys_SendKeyEvents:
movem.l a0-a1/a6/d1,-(sp)
move.l _rtgm_scr,a0
move.l _RTGMasterBase,a6
jsr _LVORtgGetMsg(a6)
cmp.l #0,d0
beq .quit
move.l d0,a0
move.l im_Class(a0),d0
xor.l d1,d1
move.w im_Code(a0),d1
lea events,a1
move.l #0,(a1)
move.l #0,4(a1)
move.w #0,8(a1)
move.w im_Qualifier(a0),4(a1)
move.w im_MouseX(a0),6(a1)
move.w im_MouseY(a0),8(a1)
move.l a0,a1
move.l _rtgm_scr,a0
movem.l d0/d1,-(sp)
jsr _LVORtgReplyMsg(a6)
movem.l (sp)+,d0/d1
move.l d0,-(sp)
and.l #IDCMP_RAWKEY+IDCMP_MOUSEBUTTONS,d0
cmp.l #0,d0
beq .quit2
move.l (sp)+,d0
and.l #IDCMP_MOUSEBUTTONS,d0
cmp.l #0,d0
bne .mouse
lea events,a0
move.w d1,(a0)
move.l a0,d0
movem.l (sp)+,a0-a1/a6/d1
rts
.mouse:
lea events,a0
move.w d1,2(a0)
move.l a0,d0
movem.l (sp)+,a0-a1/a6/d1
rts
.quit2:
move.l (sp)+,d0
.quit:
lea events,a0
move.l _rtgport,a1
move.l a2,-(sp)
move.l rdcmp_MouseY(a1),a2
move.l rdcmp_MouseX(a1),a1
move.w (a1),6(a0)
move.w (a2),8(a0)
move.l (sp)+,a2
move.l a0,d0
movem.l (sp)+,a0-a1/a6/d1
rts
events:
dc.w 0
dc.w 0,0
dc.w 0,0
_RTGM8_SwapBuffers:
movem.l a0-a3/a6/d0-d2,-(sp)
cmp.l #VID_WAIT_VSYNC,d0
bne .nowait
movem.l a0-a2,-(sp)
move.l _rtgm_scr,a0
move.l _RTGMasterBase,a6
jsr _LVOWaitTOF(a6)
movem.l (sp)+,a0-a2
.nowait:
move.l _rtgmtype,d0
cmp.l #DOUBLEBUFFER,d0
beq .DBuffer
cmp.l #BLITTER,d0
beq .Blit
cmp.l #RTGMASTER,d0
beq .Rtgmaster
beq .Movem
cmp.l #MOVEM,d0
beq .Movem
move.l _proc_type,d0
cmp.l #1,d0
beq .FCopy
.Rtgmaster:
move.l a0,a3
move.l _rtgm_scr,a0
move.l _TheMap,a1
move.l vr_x(a2),d0
move.l vr_y(a2),d1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
move.l vd_buffer(a3),a2
move.l #0,d4
move.l #0,d5
jsr _LVOCopyRtgPixelArray(a6)
jmp .quit
.Movem:
movem.l d3-d7,-(sp)
move.l a0,a3
move.l vd_buffer(a3),a0
move.l vr_y(a2),d1
mulu.l vd_rowbytes(a3),d1
move.l _TheMap,a1
add.l d1,a1
move.l vr_x(a2),d0
add.l d0,a1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
move.l vd_rowbytes(a3),d0
sub.l d2,d0
lsr.l #6,d2
sub.l #1,d2
sub.l #1,d3
move.l d2,d1
.loop:
Movem.l (A0)+,d4-d7
Movem.l d4-d7,(A1)
Movem.l (A0)+,d4-d7
Movem.l d4-d7,16*1(A1)
Movem.l (A0)+,d4-d7
Movem.l d4-d7,16*2(A1)
Movem.l (A0)+,d4-d7
Movem.l d4-d7,16*3(A1)
lea 64(a1),a1
dbra d1,.loop
move.l d2,d1
add.l d0,a0
add.l d0,a1
dbra d3,.loop
movem.l (sp)+,d3-d7
jmp .quit
.DBuffer:
move.l a0,a3
move.l _rtgm_scr,a0
move.l #1,d0
sub.l _currentbuffer,d0
jsr _LVOSwitchScreens(a6)
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,vd_buffer(a3)
move.l #1,d0
sub.l _currentbuffer,d0
move.l d0,_currentbuffer
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,_TheMap
jmp .quit
.Blit:
move.l _rtgm_scr,a0
move.l #1,a1
move.l vr_x(a2),d2
move.l vr_y(a2),d3
move.l vr_width(a2),d4
move.l vr_height(a2),d5
move.l #0,a2
move.l #0,d0
move.l #0,d1
move.l #$C0,d6
jsr _LVORtgBlit(a6)
jmp .quit
.FCopy:
move.l vd_rowbytes(a0),d2
move.l vd_buffer(a0),a0
move.l vr_x(a2),d0
move.l vr_y(a2),d1
move.l _TheMap,a1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
jsr _AmigaCC040
.quit:
movem.l (sp)+,a0-a3/a6/d0-d2
rts
_RTGM16_SwapBuffers:
movem.l a0-a3/a6/d0-d2,-(sp)
cmp.l #VID_WAIT_VSYNC,d0
bne .nowait
movem.l a0-a2,-(sp)
move.l _rtgm_scr,a0
move.l _RTGMasterBase,a6
jsr _LVOWaitTOF(a6)
movem.l (sp)+,a0-a2
.nowait:
move.l _rtgmtype,d0
cmp.l #DOUBLEBUFFER,d0
beq .DBuffer
cmp.l #BLITTER,d0
beq .Blit
.Rtgmaster:
move.l a0,a3
move.l _rtgm_scr,a0
move.l _TheMap,a1
move.l vr_x(a2),d0
move.l vr_y(a2),d1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
move.l vd_buffer(a3),a2
move.l #0,d4
move.l #0,d5
jsr _LVOCopyRtgPixelArray(a6)
jmp .quit
.DBuffer:
move.l a0,a3
move.l _rtgm_scr,a0
move.l #1,d0
sub.l _currentbuffer,d0
jsr _LVOSwitchScreens(a6)
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,vd_buffer(a3)
move.l #1,d0
sub.l _currentbuffer,d0
move.l d0,_currentbuffer
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,_TheMap
jmp .quit
.Blit:
move.l _rtgm_scr,a0
move.l #1,a1
move.l vr_x(a2),d2
move.l vr_y(a2),d3
move.l vr_width(a2),d4
move.l vr_height(a2),d5
move.l #0,a2
move.l #0,d0
move.l #0,d1
move.l #$C0,d6
jsr _LVORtgBlit(a6)
jmp .quit
.quit:
movem.l (sp)+,a0-a3/a6/d0-d2
rts
_RTGM24_SwapBuffers:
movem.l a0-a3/a6/d0-d2,-(sp)
cmp.l #VID_WAIT_VSYNC,d0
bne .nowait
movem.l a0-a2,-(sp)
move.l _rtgm_scr,a0
move.l _RTGMasterBase,a6
jsr _LVOWaitTOF(a6)
movem.l (sp)+,a0-a2
.nowait:
move.l _rtgmtype,d0
cmp.l #DOUBLEBUFFER,d0
beq .DBuffer
cmp.l #BLITTER,d0
beq .Blit
.Rtgmaster:
move.l a0,a3
move.l _rtgm_scr,a0
move.l _TheMap,a1
move.l vr_x(a2),d0
move.l vr_y(a2),d1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
move.l vd_buffer(a3),a2
move.l #0,d4
move.l #0,d5
jsr _LVOCopyRtgPixelArray(a6)
jmp .quit
.DBuffer:
move.l a0,a3
move.l _rtgm_scr,a0
move.l #1,d0
sub.l _currentbuffer,d0
jsr _LVOSwitchScreens(a6)
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,vd_buffer(a3)
move.l #1,d0
sub.l _currentbuffer,d0
move.l d0,_currentbuffer
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,_TheMap
jmp .quit
.Blit:
move.l _rtgm_scr,a0
move.l #1,a1
move.l vr_x(a2),d2
move.l vr_y(a2),d3
move.l vr_width(a2),d4
move.l vr_height(a2),d5
move.l #0,a2
move.l #0,d0
move.l #0,d1
move.l #$C0,d6
jsr _LVORtgBlit(a6)
jmp .quit
.quit:
movem.l (sp)+,a0-a3/a6/d0-d2
rts
_RTGM32_SwapBuffers:
movem.l a0-a3/a6/d0-d2,-(sp)
cmp.l #VID_WAIT_VSYNC,d0
bne .nowait
movem.l a0-a2,-(sp)
move.l _rtgm_scr,a0
move.l _RTGMasterBase,a6
jsr _LVOWaitTOF(a6)
movem.l (sp)+,a0-a2
.nowait:
move.l _rtgmtype,d0
cmp.l #DOUBLEBUFFER,d0
beq .DBuffer
cmp.l #BLITTER,d0
beq .Blit
.Rtgmaster:
move.l a0,a3
move.l _rtgm_scr,a0
move.l _TheMap,a1
move.l vr_x(a2),d0
move.l vr_y(a2),d1
move.l vr_width(a2),d2
move.l vr_height(a2),d3
move.l vd_buffer(a3),a2
move.l #0,d4
move.l #0,d5
jsr _LVOCopyRtgPixelArray(a6)
jmp .quit
.DBuffer:
move.l a0,a3
move.l _rtgm_scr,a0
move.l #1,d0
sub.l _currentbuffer,d0
jsr _LVOSwitchScreens(a6)
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,vd_buffer(a3)
move.l #1,d0
sub.l _currentbuffer,d0
move.l d0,_currentbuffer
move.l _rtgm_scr,a0
move.l _currentbuffer,d0
jsr _LVOGetBufAdr(a6)
move.l d0,_TheMap
jmp .quit
.Blit:
move.l _rtgm_scr,a0
move.l #1,a1
move.l vr_x(a2),d2
move.l vr_y(a2),d3
move.l vr_width(a2),d4
move.l vr_height(a2),d5
move.l #0,a2
move.l #0,d0
move.l #0,d1
move.l #$C0,d6
jsr _LVORtgBlit(a6)
jmp .quit
.quit:
movem.l (sp)+,a0-a3/a6/d0-d2
rts
_TheMap: dc.l 0
_rtgm_scr: dc.l 0
_rtgm_backingbuf: dc.l 0
_RTGMasterBase: dc.l 0
_currentbuffer: dc.l 0
_proc_type: dc.l 0
_rtgmtype: dc.l 0
_extravram: dc.l 0
_rtgport: dc.l 0
END